﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SeCompUFSCarWeb.Models;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;

namespace SeCompUFSCarWeb.Evento
{
    public partial class MiniCurso : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            InscricaoMiniCurso vagas = new InscricaoMiniCurso();
            SignUp inscrito = new SignUp();

            inscrito.UserID = Context.User.Identity.GetUserId();
            vagas.UserID = Context.User.Identity.GetUserId();

            inscrito.VerificaInscricaoByUserID();
            bool vagasI = vagas.Inscrito();

            if (vagasI || inscrito.Payment == false || inscrito.Pack == 0 || inscrito.Pack == 1 || inscrito.CourseID == 0)
            {
                Response.Redirect("http://www.secomp.ufscar.br");
            }


            foreach (RadioButton r in MiniC.Controls.OfType<RadioButton>())
            {
                if (r.GroupName == "MiniCurso")
                {
                    switch (r.Text)
                    {
                        case "Gimp e Inkscape para Gráficas e Web":
                            vagas.Course = 1;
                            r.Visible = Disponivel(1, 25);
                            lblMC1.Visible = r.Visible;
                            break;
                        case "Introdução à Unreal Development Kit e Blender":
                            vagas.Course = 2;
                            r.Visible = Disponivel(2, 25);
                            lblMC2.Visible = r.Visible;
                            break;
                        case "Python para Zumbis":
                            vagas.Course = 3;
                            r.Visible = Disponivel(3, 25);
                            lblMC3.Visible = r.Visible;
                            break;
                        case "Lean Software Development : Como empresas ágeis desenvolvem software":
                            vagas.Course = 4;
                            r.Visible = Disponivel(4, 90);
                            lblMC4.Visible = r.Visible;
                            break;
                        case "Desenvolvimento de aplicativos móveis na plataforma Android":
                            vagas.Course = 5;
                            r.Visible = Disponivel(5, 25);
                            lblMC5.Visible = r.Visible;
                            break;
                        case "Sistemas Fuzzy e o Matlab":
                            vagas.Course = 6;
                            r.Visible = Disponivel(6, 25);
                            lblMC6.Visible = r.Visible;
                            break;
                        //case "Smashing the stack for Fun":
                        //    vagas.Course = 7;
                        //    r.Visible = Disponivel(7, 25);
                        //    lblMC7.Visible = r.Visible;
                        //    break;
                        //case "Implantação da redes 4G no Brasil":
                        //    vagas.Course = 8;
                        //    r.Visible = Disponivel(8, 90);
                        //    lblMC8.Visible = r.Visible;
                        //    break;
                    }
                }
            }


        }

        private bool Disponivel(int id, int maxVagas)
        {
            InscricaoMiniCurso consultaVagas = new InscricaoMiniCurso();
            consultaVagas.Course = id;

            if (consultaVagas.VagasOcupadas() < maxVagas)
                return true;


            return false;
        }

        protected void Inscrever_Click(object sender, EventArgs e)
        {
            InscricaoMiniCurso vagas = new InscricaoMiniCurso();
            vagas.UserID = Context.User.Identity.GetUserId();
            int maxVagas = 25;

            //Minicurso
            if (!vagas.Inscrito())
            {
                foreach (RadioButton r in MiniC.Controls.OfType<RadioButton>())
                {
                    if (r.GroupName == "MiniCurso" && r.Checked)
                    {
                        switch (r.Text)
                        {
                            case "Gimp e Inkscape para Gráficas e Web":
                                vagas.Course = 1;
                                break;
                            case "Introdução à Unreal Development Kit e Blender":
                                vagas.Course = 2;
                                break;
                            case "Python para Zumbis":
                                vagas.Course = 3;
                                break;
                            case "Lean Software Development : Como empresas ágeis desenvolvem software":
                                vagas.Course = 4;
                                maxVagas = 90;
                                break;
                            case "Desenvolvimento de aplicativos móveis na plataforma Android":
                                vagas.Course = 5;
                                break;
                            case "Sistemas Fuzzy e o Matlab":
                                vagas.Course = 6;
                                break;
                            //case "Smashing the stack for Fun":
                            //    vagas.Course = 7;
                            //    break;
                            //case "Implantação da redes 4G no Brasil":
                            //    vagas.Course = 8;
                            //    maxVagas = 90;
                            //    break;
                            default:
                                Erro();
                                break;
                        }
                    }
                }
            }

            if (Disponivel(vagas.Course, maxVagas))
            {
                if (vagas.Inscrever())
                {
                    var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
                    var currentUser = manager.FindById(Context.User.Identity.GetUserId());
                    string nome = currentUser.FullName;
                    string curso = "";

                    switch (vagas.Course)
                    {
                        case 1:
                            curso = "Gimp e Inkscape para Gráficas e Web";
                            break;
                        case 2:
                            curso = "Introdução à Unreal Development Kit e Blender";
                            break;
                        case 3:
                            curso = "Python para Zumbis";
                            break;
                        case 4:
                            curso = "Lean Software Development : Como empresas ágeis desenvolvem software";
                            break;
                        case 5:
                            curso = "Desenvolvimento de aplicativos móveis na plataforma Android";
                            break;
                        case 6:
                            curso = "Sistemas Fuzzy e o Matlab";
                            break;
                        //case 7:
                        //    curso = "Smashing the stack for Fun";
                        //    break;
                        //case 8:
                        //    curso = "Implantação da redes 4G no Brasil";
                        //    break;
                    }

                    EmailDeConfirmacao(nome, curso, Context.User.Identity.Name);
                    Sucesso();
                }
            }

            Erro();
        }

        protected void Erro()
        {
            Response.Redirect("~/Evento/Erro.aspx");
        }

        private void Sucesso()
        {
            Response.Redirect("~/Evento/Confirmacao.aspx");
        }

        private bool EmailDeConfirmacao(string nome, string mc, string email)
        {
            string htmlCode = System.IO.File.ReadAllText(Server.MapPath("~/Emails/InscricaoMinicurso.html"));

            htmlCode = htmlCode.Replace("#NOME", nome).Replace("#MINICURSO", mc);

            return Mail.Send(email, htmlCode, "Inscrição Minicurso V SeComp UFSCar 2014");
        }
    }
}